﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FinanSoft.Entities;
using FinanSoft.BusinessLayer;
using FinanSoft.Utilities;
using System.Xml;
using System.Data.SqlClient;


namespace FinanSoft
{
    public partial class frmCrearTemporada : Form
    {
        public frmCrearTemporada()
        {
            
            InitializeComponent();
            agregarPeriodos();

        }
        // Funcion que me va metiendo en un combobox todos los periodos
        private void agregarPeriodos() 
        {
            AccountingPeriod[] arregloPeriodos = PeriodManager.GetInstance().GetAccountingPeriod();

            for (int ele = 0; ele < arregloPeriodos.Length; ele++) 
            {
                cmbsPeriodos.Items.Add(arregloPeriodos[ele].Name);
            }
            
        }

        //Funcion que me crea una temporada
        public void crearTemporadas() 
        {
            AccountingPeriod[] arregloPeriodos = PeriodManager.GetInstance().GetAccountingPeriod();
            int idPeriodo = -1;
            for (int m = 0; m < arregloPeriodos.Length; m++ )
            {
                 
                if (cmbsPeriodos.SelectedItem.ToString().Equals(arregloPeriodos[m].Name))
                {
                    
                    idPeriodo = arregloPeriodos[m].Id;
                    break;
                }
                else { }
            }

            PeriodManager.GetInstance().CreateNewSeason(idPeriodo, txtNombre.Text, dtpFechaIni.Value,
                dtpFechaFin.Value, dtpFIniV.Value, dtpFFinV.Value);

        }

        //Funcion que me verifica y crea una temporada
        public void verificarYGuardarTemporada()
        {
            if ((txtNombre.Equals("")) || (cmbsPeriodos.Equals(null)))
            {
                MessageBox.Show(MessageConstants.MISSING_FIELDS, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else { crearTemporadas(); }
        }

        //Funcion que me verifica si una temporada existe para cierto periodo
        public bool existeTemporada()
        {
            AccountingPeriod[] arregloPeriodos = PeriodManager.GetInstance().GetAccountingPeriod();
           
            for (int m = 0; m < arregloPeriodos.Length; m++)
            {

                if (cmbsPeriodos.SelectedItem.ToString().Equals(arregloPeriodos[m].Name))
                {
                    Season[] temps = arregloPeriodos[m].Seasons;
                    for (int y = 0; y < temps.Length; y++)
                    {
                        if (txtNombre.Text.Equals(temps[y].Name))
                        {
                            return true;
                        }
                        else { }
                    }
                    return false;
                }
                else { }
            }
            return false;


        }

        
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if ((cmbsPeriodos.Text.Equals("")) || (txtNombre.Text.Equals("")))
            {
                MessageBox.Show(MessageConstants.MISSING_FIELDS, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }else if (DateTime.Compare(dtpFechaIni.Value, dtpFechaFin.Value) > 0)
            {
                MessageBox.Show(MessageConstants.DATE_SEASON, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (DateTime.Compare(dtpFIniV.Value, dtpFFinV.Value) > 0)
            {
                MessageBox.Show(MessageConstants.DATE_SEASON_DUE, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else if (existeTemporada())
            {
                MessageBox.Show(MessageConstants.EXIST_SEASON, MessageConstants.TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNombre.Text = "";
            }
            else
            {
                verificarYGuardarTemporada();
                Close();
            }

             
            
            
        }

        private void cmbsPeriodos_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

    }
}
